package svc

import (
	"UserServer/rpc/internal/config"
	"go.uber.org/zap"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"os"
	"time"
)

func InitGorm(mysqlCfg config.Mysql, Log *zap.Logger) *gorm.DB {
	db, err := gorm.Open(mysql.Open(mysqlCfg.Dsn()), &gorm.Config{
		Logger: logger.Default.LogMode(mysqlCfg.LogLevel()),
	})

	if err != nil {
		Log.Error("Failed to connect to MySQL:", zap.Error(err))
		os.Exit(1)
	}

	// 获取底层的 SQL 数据库连接对象
	sqlDB, _ := db.DB()

	// 看看能不能ping的通
	if err := sqlDB.Ping(); err != nil {
		Log.Error("Failed to connect to MySQL:", zap.Error(err))
		os.Exit(1)
	}

	// 设置数据库连接池中的最大空闲连接数
	sqlDB.SetMaxIdleConns(mysqlCfg.MaxIdleConn) //10
	// 设置数据库的最大打开连接数
	sqlDB.SetMaxOpenConns(mysqlCfg.MaxOpenConn) //100
	//sqlDB.SetConnMaxLifetime(time.Hour * 7)     // 强制回收
	sqlDB.SetConnMaxIdleTime(time.Minute * 30) // 空闲连接可以存在的最长时间
	return db
}
